/*
 *  Copyright 2006-2008 NMaven Project 
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License"); 
 *  you may not use this file except in compliance with the License. 
 *  You may obtain a copy of the License at 
 *  
 *  	http://www.apache.org/licenses/LICENSE-2.0 
 *  
 *  Unless required by applicable law or agreed to in writing, software 
 *  distributed under the License is distributed on an "AS IS" BASIS, 
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 *  See the License for the specific language governing permissions and 
 *  limitations under the License. 
 */
package org.sonatype.nmaven.assembler;

import org.sonatype.nmaven.ProgrammingLanguage;

import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.File;

/**
 * Provides services for creating an AssemblyInfo class.
 */
public interface AssemblyInfoMarshaller
{
    /**
     * Writes the assembly info to AssemblyInfo.[language-extension].
     *
     * @param assemblyInfo the assembly info
     * @param outputStream the output stream to write to (currently unused)
     * @throws IOException if there was a problem writing out the class file
     */
    void marshal( AssemblyInfo assemblyInfo, OutputStream outputStream )
        throws IOException;

    /**
     * Unmarshalls an AssemblyInfo.* class file.
     *
     * @param inputStream the input stream of the AssemblyInfo.* class file
     * @return an AssemblyInfo object for the specified input stream
     * @throws IOException if there was a problem reading the AssemblyInfo class file
     */
    AssemblyInfo unmarshall( InputStream inputStream) throws IOException;

    void init( ProgrammingLanguage programmingLanguage, File buildSourcesDirectory );

    ProgrammingLanguage getProgrammingLanguageForMarshaller();
}
